package com.ai.imagetext.repository;

import com.ai.imagetext.entity.SystemConfig;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;

@Repository
public interface SystemConfigRepository extends JpaRepository<SystemConfig, Long> {
    
    /**
     * 根据配置键查找配置
     */
    Optional<SystemConfig> findByConfigKey(String configKey);
    
    /**
     * 根据配置类型查找配置
     */
    List<SystemConfig> findByConfigType(SystemConfig.ConfigType configType);
    
    /**
     * 根据配置键模糊搜索
     */
    List<SystemConfig> findByConfigKeyContaining(String keyword);
    
    /**
     * 根据描述模糊搜索
     */
    List<SystemConfig> findByDescriptionContaining(String keyword);
    
    /**
     * 更新配置值
     */
    @Modifying
    @Query("UPDATE SystemConfig sc SET sc.configValue = :configValue, sc.updatedAt = CURRENT_TIMESTAMP " +
           "WHERE sc.configKey = :configKey")
    void updateConfigValue(@Param("configKey") String configKey, @Param("configValue") String configValue);
    
    /**
     * 批量更新配置
     */
    @Modifying
    @Query("UPDATE SystemConfig sc SET sc.configValue = :configValue, sc.updatedAt = CURRENT_TIMESTAMP " +
           "WHERE sc.configKey IN :configKeys")
    void updateConfigValues(@Param("configKeys") List<String> configKeys, @Param("configValue") String configValue);
    
    /**
     * 获取配置值（如果不存在返回默认值）
     */
    @Query("SELECT COALESCE(sc.configValue, :defaultValue) FROM SystemConfig sc WHERE sc.configKey = :configKey")
    String getConfigValueOrDefault(@Param("configKey") String configKey, @Param("defaultValue") String defaultValue);
    
    /**
     * 检查配置是否存在
     */
    boolean existsByConfigKey(String configKey);
    
    /**
     * 根据配置类型统计数量
     */
    long countByConfigType(SystemConfig.ConfigType configType);
    
    /**
     * 获取所有配置键
     */
    @Query("SELECT sc.configKey FROM SystemConfig sc ORDER BY sc.configKey")
    List<String> findAllConfigKeys();
}